package com.micro.ai.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.micro.ai.auth.entity.DictType;

import java.util.List;

/**
 * 字典类型服务接口
 *
 * @author micro-ai
 * @since 2025-01-29
 */
public interface DictTypeService extends IService<DictType> {

    /**
     * 分页查询字典类型
     *
     * @param page 分页参数
     * @param code 字典类型编码
     * @param name 字典类型名称
     * @param status 状态
     * @param tenantId 租户ID
     * @return 分页结果
     */
    IPage<DictType> getDictTypePage(Page<DictType> page, String code, String name, String status, String tenantId);

    /**
     * 根据编码查询字典类型
     *
     * @param code 字典类型编码
     * @param tenantId 租户ID
     * @return 字典类型
     */
    DictType getByCode(String code, String tenantId);

    /**
     * 查询所有启用的字典类型
     *
     * @param tenantId 租户ID
     * @return 字典类型列表
     */
    List<DictType> getActiveDictTypes(String tenantId);

    /**
     * 创建字典类型
     *
     * @param dictType 字典类型
     * @return 是否成功
     */
    boolean createDictType(DictType dictType);

    /**
     * 更新字典类型
     *
     * @param dictType 字典类型
     * @return 是否成功
     */
    boolean updateDictType(DictType dictType);

    /**
     * 删除字典类型
     *
     * @param id 字典类型ID
     * @return 是否成功
     */
    boolean deleteDictType(String id);

    /**
     * 批量删除字典类型
     *
     * @param ids 字典类型ID列表
     * @return 是否成功
     */
    boolean batchDeleteDictTypes(List<String> ids);

    /**
     * 检查字典类型编码是否存在
     *
     * @param code 字典类型编码
     * @param tenantId 租户ID
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByCode(String code, String tenantId, String excludeId);
}
